home *** CD-ROM | disk | FTP | other *** search
/ Power CD-ROM!! 8 / Power CD-ROM 8.iso / prgmming / oldutil / feed.asm < prev    next >
Assembly Source File  |  1994-12-10  |  3KB  |  131 lines

  1.     Name feed
  2.     Title    feed
  3.     page    ,132
  4. comment /
  5.  
  6.     This program is a filter that reads the parameter line
  7.     for a file spec.  If it finds one it opens all matching
  8.     files and sends them to standard output.  This is good
  9.     for processing more than one file, find, translat, etc.
  10. /
  11. ;===================================================================
  12. code    segment    public
  13. ;===================================================================
  14. ;
  15. ;    command line is at 80h of psp - first byte is length
  16. ;
  17.     org    80h
  18. dta    db    21 dup (?)
  19. attrib    db    ?
  20. ftime    dw    ?
  21. fdate    dw    ?
  22. fsize    dd    ?
  23. fname    db    13 dup (?)     ; dta asciiz filename from dos.
  24. ;
  25. ; .com starts at 100h - but must jump around any data area
  26. ;
  27.     org    100h            ; com file starts here
  28.     assume    cs:code,ds:code,es:code
  29. feed:
  30.     jmp    short clear
  31. ;===================================================================
  32. ;
  33. ; data area for .com programs
  34. ;
  35. handle    dw    0h            ; assume standard input
  36. bufsiz    equ    256
  37. ;
  38. ;===================================================================
  39. clear:
  40. ;
  41. ; start of actual code is here (clear)
  42. ;
  43.     mov    ah,30h        ; get dos version
  44.     int    21h
  45.     cmp    al,2        ; must be at least 2.0
  46.     jb    nomore
  47. ;
  48. ; release uneeded memory
  49. ;
  50.     lea    bx,buffer[512]    ; 256 byte buffer + 256 byte stack
  51.     mov    sp,bx
  52.     mov    cx,4
  53.     sar    bx,cl
  54.     inc    bx        ; paragraphs needed = end/16 + 1
  55.     mov    ah,4ah        ; SETBLOCK
  56.     int    21h
  57. ;
  58. ; now figure out which file to read from - parm line or standard input
  59. ;
  60.     cmp    dta,0h        ; if zero, no parm
  61.     jz    nomore        ; must have parm to read
  62. ;
  63. ; parm length is not zero - assume the parm is a file name.  If not
  64. ; found, quit.
  65. ;
  66.     mov    al,dta        ; get size of parm
  67.     xor    ah,ah        ; zero out top part of accum.
  68.     mov    si,ax        ; use length as a pointer into the dta
  69.     mov    [si]+dta+1,0h    ; to tack on a zero byte (asciiz).
  70. ;
  71. ; Use the default dta at 80h.  Find first matching filename.
  72. ;
  73.     mov    dx,offset dta+2    ; address of 'filename'
  74.     xor    cx,cx        ; attributes of file - (normal)
  75.     mov    ah,4Eh        ; dos
  76.     int    21h        ; invoke function
  77.     jc    nomore        ; error or no match - quit
  78. ;
  79. ; fname should now contain the first byte of an asciiz filename that
  80. ; matches the filespec from the parmline. open the file and send it
  81. ; to standard output.
  82. ;
  83. again:
  84. ;
  85. ; open the file
  86. ;
  87.     mov    dx,offset fname    ; point at asciiz filename
  88.     mov    al,0h        ; open for reading
  89.     mov    ah,3dh        ; read function call
  90.     int    21h        ; invoke dos
  91.     jc    oops
  92.     mov    handle,ax    ; save file handle.
  93. ;
  94. ; now use the handle to read the file.  AX will contain the # of
  95. ; characters returned from the file after the read.
  96. ; if ax=0 eof.
  97. ;
  98. readloop:
  99.     mov    bx,handle    ; read from standard input or file
  100.     mov    cx,bufsiz    ; # of characters to read
  101.     mov    dx,offset buffer    ; seg:off address of buffer area
  102.     mov    ah,3fh        ; dos read function
  103.     int    21h        ; invoke function
  104.     jc    oops        ; error!
  105.     cmp    ax,0h        ; if zero, end of file
  106.     jz    oops
  107. ;
  108.     mov    cx,ax        ; cx (and ax) contain # characters read
  109.     mov    si,offset buffer    ; offset of buffer
  110. ;
  111.     mov    bx,1h        ; standard output device
  112.     mov    ah,40h        ; dos write function
  113.     int    21h        ; invoke dos function
  114.  
  115.     jmp    readloop    ; repeat until end of file or error
  116. oops:
  117. ;
  118. ; end of file or access error
  119. ; jump to next filename
  120. ;
  121.     mov    ah,4fh        ; this call takes no input.
  122.     int    21h        ; if carry set, no more files.
  123.     jnc    again       ; if no carry, go transfer this one
  124. nomore:
  125.     int    20h        ; return to dos
  126.  
  127. buffer    label    byte
  128.  
  129. code    ends
  130.     end    feed
  131.